# -*- coding: utf-8 -*-
"""
轮动策略框架 | 邢不行 | 2024分享会
author: 邢不行
微信: xbx6660
"""
import os
import program.Config as Cfg
import Tools.rotation_simulator.Function as Fun

# 感谢瓜大仙老板的启发：https://bbs.quantclass.cn/thread/36224
# 感谢请叫我小锅老板提供的思路：https://bbs.quantclass.cn/thread/40148
# 感谢白驹过隙老板提供的思路：https://bbs.quantclass.cn/thread/40067
# 感谢时间的复利老板提供了指数K线图的思路：https://bbs.quantclass.cn/thread/40151

# 需要修改的参数
shift_bt_file_name = 'BiasILLQ12H_轮动资金曲线_12H_0.csv'   # 策略回测的文件名

factor_cols = ['Bias_37']   # 要看的因子，需要先跑1_策略数据整理.py算出策略的因子

show_stock_return = False  # 是否显示当期选中轮动策略中的个股或币的前3/后3的收益率信息

# 几乎不需要修改的参数
period_count = 25   # 需要展示的周期数
window_width = 1300   # 界面窗口大小

# 解析文件名获取策略名和offset
shift_bt_file_name_split = shift_bt_file_name.split('_')
offset = shift_bt_file_name_split[-2] + '_' + shift_bt_file_name_split[-1].split('.')[0]
sft_inter_data_file = f'{shift_bt_file_name_split[0]}_轮动策略中间数据_{offset}.pkl'   # 策略回测的中间数据

# 导入策略名
strategy_name = f'Shift_{shift_bt_file_name_split[0]}'
_cls = __import__('%s.%s' % ('program.shift', strategy_name), fromlist=('',))
_, _, _, all_equity_file = Fun.get_equity_path(_cls.base_strategy_dict, Cfg.base_config_path)

# 获取轮动策略的回测结果路径
sft_bt_path = os.path.join(Cfg.root_path, 'data/回测结果/%s' % shift_bt_file_name)
# 获取轮动策略保存下来的中间数据路径
shift_ftr_path = os.path.join(Cfg.root_path, 'data/回测结果/%s' % sft_inter_data_file)
# 获取子策略策略的回测结果路径
slt_bt_path = os.path.join(Cfg.base_config_path, 'data/回测结果')
# 获取币种对应的数据路径
stock_data_path = [Cfg.spot_path, Cfg.swap_path]  # 为了和股票保持一致，变量名为stock_data_path
# 获取指数数据路径
index_path = stock_data_path[0] + 'BTC-USDT.csv'
# 多线程的CPU参与计算的数量
n_jobs = min(60, os.cpu_count() - 1)  # 多线程的最大数量，未修改的joblib在windows环境下只支持最高63

# 如果模拟器要展示的因子数量大于5，会报错，需要减少因子数量
if len(factor_cols) > 5:
    print('因子数量太多了，减少一点因子数量')
    exit()

# 调整B圈保存的数据与股票一致
sft_bt_path, shift_ftr_path, index_path = Fun.adjust_file(sft_bt_path, shift_ftr_path, all_equity_file, _cls.base_strategy_dict, index_path)
